
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

import pymysql

pymysql.install_as_MySQLdb()

app = Flask(__name__)

db = SQLAlchemy(app)

# 连接数据库

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:123456@localhost/flask"

# SQLALCHEMY_DATABASE_URI# 用于连接数据的数据库。

# SQLALCHEMY_TRACK_MODIFICATIONS

# 如果设置成 True (默认情况)，

# Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。

# 这需要额外的内存， 如果不必要的可以禁用它。

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True


# 得到SQLAlchemy对象db = SQLAlchemy(app, use_native_unicode='utf8')

# 然后创建model对象

class User(db.Model):
    __tablename__ = 'users'  # （设置表名）

    id = db.Column(db.Integer, primary_key=True)  # （设置主键）

    username = db.Column(db.String(255), unique=True)

    password = db.Column(db.String(255), unique=True)

    # 返回一个可以用来表示对象的可打印字符串：（相当于java的toString）
    def to_json(self):
        """将实例对象转化为json"""
        item = self.__dict__
        if "_sa_instance_state" in item:
            del item["_sa_instance_state"]
        return item

    def __repr__(self):
        return '<User 用户名：%r 密码：%r>' % (self.username, self.password)  # 操作数据库

user = User()


@app.route('/')
def hello():
    return "<p>Hello, World!</p>"


# 增
@app.route('/add', methods=['GET', 'POST'])
def add_object():

    # user = User(request.json)
    user.username = request.json['username']
    user.password = request.json['password']
    # print(user)

    db.session.add(user)
    #
    db.session.commit()
    #
    # print("添加 % r 完成" % user.__repr__)
    return "<p>添加成功</p>"


# 查 （用到and的时候需要导入库from sqlalchemy import and_）
@app.route('/query', methods=['GET', 'POST'])
def query_object():

    users = user.query.filter_by(username=request.json['username']).all()
    user_list = []
    for u in users:
        user_list.append(u.to_json())
    return jsonify(user_list)


# 删
@app.route('/delete', methods=['GET', 'POST'])
def delete_object():
    u = user.query.get(request.json['id'])

    db.session.delete(u)

    db.session.commit()

    return "<p>删除成功</p>"

# 改
@app.route('/update', methods=['GET', 'POST'])
def update_object():

    u = user.query.get(request.json['id'])

    u.username = request.json['username']

    db.session.commit()

    return "<p>修改成功</p>"

# if __name__ == 'app':
#     # db.create_all()创建表
#     app.run()
